「 Velero 」源码走读 — Request
based on v1.6.3
DownloadRequest
DownloadTargetKind
代表着要从 BackupStorageLocation 中下载的文件,映射关系如下
DownloadTargetKind | BackupStorageLocation 中的文件 |
---|---|
BackupLog | backups/<backup>/<backup>-logs.gz |
BackupContents | backups/<backup>/<backup>.tar.gz |
BackupVolumeSnapshots | backups/<backup>/<backup>-volumesnapshots.json.gz |
BackupResourceList | backups/<backup>/<backup>-resource-list.json.gz |
RestoreLog | restores/<restore>/<restore>-logs.gz |
RestoreResults | restores/<restore>/restore-<restore>-results.gz |
ServerStatusRequest
ServerStatusRequest 不支持通过命令行手动创建,而是在获取 Velero 组件状态时,会自动生成该对象,由 ServerStatusRequest Controller 维护。
DownloadRequest Controller
pkg/controller/download_request_controller.go
pkg/cmd/util/downloadrequest/downloadrequest.go
Reconcile
- 如果 DownloadRequest 状态不为空并且有过期时间的,代表该对象不是已经处理过,则需要进一步判断其是否达到过期时间
- 如果已过期,则从集群中删除
- 如果未过期,并且状态为 Processed,则不做处理
虽然已经处理过了,但是并没有直接删除是因为有可能 log 文件流还在使用
- 如果 DownloadRequest 状态是空或者 New 的,调用 StorageProvider 的 GetDownloadURL 接口获取 DownloadURL 信息并设置到 DownloadRequest 中,同时更新其状态为 Processed,重新设置过期时间为 10 分钟
如果调用 GetDownloadURL 时出现异常,则需要终止流程,并且重新入队,交给下次流程处理 - 最终,以上步骤中如果存在流程异常或者对象被合理删除,则不再重新入队,此后流程中,不再处理;否则,
Stream
上层应用方式,并非 DownloadRequest Controller 逻辑
- 根据函数入参信息构建 DownloadRequest 对象,下发至集群中创建,后续由 DownloadRequest Controller 负责维护
- 每 25 毫秒检测一下,直至 DownloadRequest 的 DownloadURL 被设置
该动作就是 DownloadRequest Controller 核心工作内容 - 根据 DownloadURL 信息,构建 HTTP GET 请求,获取到 StorageProvider 中的文件数据,写入签名提供的 io.Writer 中
应用的场景包括
- velero backup download
- velero backup/restore describe
- velero backup/restore logs
ServerStatusRequest Controller
pkg/controller/server_status_request_controller.go
Reconcile
- 如果 ServerStatusRequest 状态是空或者 New,则更新其状态为 Processed,设置处理时间戳以及 Velero 服务中安装的插件信息
- 如果 ServerStatusRequest 状态是 Processed,则判断其是否达到过期时间
- 如果已过期,则从集群中删除
- 如果未过期,则设置下次入队时间为 5 分钟之后
- 如果 ServerStatusRequest 状态不满足上述,则不再重新入队,此后流程中,不再处理
GetServerStatus
上层应用方式,非 ServerStatusRequest Controller 逻辑
- 根据函数入参信息构建 ServerStatusRequest 对象,下发至集群中创建,后续由 ServerStatusRequest Controller 负责维护
- 每 250 毫秒检测一下,直至 ServerStatusRequest 的状态为 Processed,返回 ServerStatusRequest 对象信息
该动作就是 ServerStatusRequest Controller 核心工作内容
应用的场景包括
- velero plugin get
「 Velero 」源码走读 — Request
http://shenxianghong.github.io/2022/02/05/2022-02-05 Velero 源码走读 - Request/